<?php
/**
 * Zead
 *
 * LICENSE	
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.opensource.org/licenses/bsd-license.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to eu@marcelomx.com so we can send you a copy immediately.
 *
 * @category   Zead
 * @author     Marcelo Rodrigues Gonzaga <eu@marcelomx.com>
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga
 * @link       http://code.google.com/p/zead 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License
 *
 **/


/** @see Zead_Html_Renderer_Exception **/
require_once 'Zead/Html/Exception.php';

/**
 * Class Zead_Html_Renderer
 *
 * @category   Zead
 * @package    Zead_Html
 * @copyright  Copyright (c) 2008 Marcelo Rodrigues Gonzaga 
 * @license    http://www.opensource.org/licenses/bsd-license.php     New BSD License  
 */
class Zead_Html_Renderer 
{
	/**
	 * O objeto Zead_Html
	 * @var Zead_Html
	 */
	protected $_view = null;
	
	/**
	 * Os dados de template
	 * @var array
	 */
	protected $_data = array();
	
	/**
	 * Class constructor
	 * @param Zead_Html $view Parametro opcional.
	 */
	public function __construct($view = null) 
	{
		$this->_view = $view;
	}
	
	/**
	 * Recupera um atributo aplicado ao renderizador (template)
	 * @param string $key O atributo.
	 * @return mixed
	 */
	public function __get($key) 
	{
		return $this->_data[$key];
	}
	
	/**
	 * Cria um novo atributo com valor a ser recuperado no momento da renderização.
	 * @param string $key   O nome do atributo
	 * @param mixed  $value O valor do atributo.
	 */
	public function __set($key, $value) 
	{
		$this->_data[$key] = $value;
	}
	
	/**
	 * Processa um arquivo, renderizando e retornando o conteúdo gerado por ele.
	 * O atributo execute especifica se o arquivo será incluído e processado
	 * pelo servidor, do contrário será apenas lido, trazendo todo o seu conteúdo
	 * original.
	 * 
	 * @param  string $file String contendo o caminho para o arquivo a ser executado.
	 * @param  bool   $eval Se o arquivo será executado ou não.
	 * @return string
	 */
	public function render($file, $eval = true) 
	{
		if (is_file($file) && !file_exists($file))
			throw new Zead_Html_Exception('The file must be a valid file');
	
		if ($eval !== true)
			return file_get_contents($file);
			
		ob_start();
		include_once($file);
		$output = ob_get_clean();
		
		return $output;
	}	
}
